home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / t_os / fmhandsp / fmhandsp.bas < prev    next >
BASIC Source File  |  1993-11-30  |  17KB  |  600 lines

  1. 10 '
  2. 20 '  ローマ字ハングル変換(フリコレ7版)
  3. 30 '  Copyright (C) 1993 GFD02650 BIRDO
  4. 40 '
  5. 50 ' 子音 平音 G N D (R,L) M (B,V) S X (J,Z) C K T (F,P) H
  6. 60 '           1 2 3   4   5   6   7 8   9   A B C   D   E
  7. 70 '      濃音は 平音の次に Q をつける
  8. 80 '           GQ DQ (BQ,VQ) SQ (JQ,ZQ)
  9. 90 '           11 12    13   14    15
  10. 100 ' 母音 A YA EO YEO O YO U YU EU I
  11. 110 '      1  2  3   4 5  6 7  8  9 A
  12. 120 '      (AI,AE) (YAI,YAE) (EOI,E) (YEOI,YE) (OA,WA) (OAI,WAI,OAE,WAE)
  13. 130 '         11       12       13       14       15           16
  14. 140 '      OI (UEO,WEO) (UE,WE) (UI,WI) EUI
  15. 150 '      17    18       19      1A     1B
  16. 160 ' パッチム  子音に加えて
  17. 170 '           GS (NJ,NZ) NH LG LM (LB,LV) LS LT (LF,LP) LH (BS,VS)
  18. 180 '           21   22    23 24 25    26   27 28    29   2A   2B
  19. 190 '
  20. 200 ' 変数一覧表
  21. 210 ' 単純変数
  22. 220 ' INFILE$    入力用ファイル名
  23. 230 ' FONTFILE$  フォントファイル名
  24. 240 ' ALPHA      アルファベットであることを示す
  25. 250 ' CODE1      ASCII-65
  26. 260 ' HANGULFLAG ハングルの処理中であることを示す
  27. 270 ' HANGULMODE ハングルのモードであることを示す
  28. 280 ' ATR1       アトリビュート
  29. 290 ' CFLAG      子音の処理中であることを示す
  30. 300 ' VFLAG      母音の処理中であることを示す
  31. 310 ' PFLAG      パッチムの処理中であることを示す
  32. 320 ' NOCRFLAG   改行しないことを示す
  33. 330 ' COUNT      処理中の行の中での位置を示す
  34. 340 ' CCODE      子音のコード
  35. 350 ' VCOUNT     母音のカウンタ
  36. 360 ' PCOUNT     パッチムのカウンタ
  37. 370 ' VOWEL      母音の確定コード
  38. 380 ' BATCIM     パッチムの確定コード
  39. 390 ' CWORK      子音コード作成のためのワーク
  40. 400 ' REC        フォント・ファイルのレコード番号
  41. 410 ' N          レコード内の位置
  42. 420 ' WORK       ファイル内の位置計算用ワーク
  43. 430 ' X,Y        画面上の座標
  44. 440 '
  45. 450 ' 配列変数
  46. 460 ' ATR(25)  A-ZのASCIIコード-65を添字とし、 母音:0 子音:1 Q:2
  47. 470 ' CODE(25) A-ZのASCIIコード-65を添字とし、 上記コードを値とする
  48. 480 ' VCODE(3)   母音のコード
  49. 490 ' PCODE(1)   パッチムのコード
  50. 500 ' HANGULCODE(2)  変換後のハングルのコード
  51. 510 '
  52. 520 DEFINT A-Z
  53. 530 DIM ATR(25),CODE(25),HANGULCODE(2),FONT(15)
  54. 540 RESTORE *ATTRIBUTE
  55. 550 FOR I=0 TO 25
  56. 560    READ ATR(I)
  57. 570 NEXT I
  58. 580 FOR I=0 TO 25
  59. 590    READ CODE(I)
  60. 600 NEXT I
  61. 610 CLS
  62. 620 PRINT "  ローマ字ハングル変換(フリコレ7版)"
  63. 630 PRINT "  Copyright (C) 1993 GFD02650 BIRDO"
  64. 640 PRINT 
  65. 650 PRINT "入力するファイル(キーボードからのときはRETURNのみ)"
  66. 660 LINE INPUT INFILE$
  67. 670 IF INFILE$>"" THEN
  68. 680   OPEN "I",#1,INFILE$
  69. 690 ENDIF
  70. 700 NOCRFLAG=0
  71. 710 FONTFILE$="HANGUL.FNT"
  72. 720 *出力ファイル
  73. 730   OPEN "R",#2,"(32)"+FONTFILE$
  74. 740   IF LOF(2)=0 THEN GOTO *SETFONT
  75. 750   CLS
  76. 760 *1行読み込み
  77. 770 IF INFILE$>"" THEN
  78. 780   IF EOF(1) THEN *END
  79. 790   LINE INPUT #1,LIN$
  80. 800 ELSE
  81. 810   LOCATE 0,Y
  82. 820   LINE INPUT LIN$
  83. 830   IF LIN$="" THEN *END ' キーボードからの入力のとき
  84. 840   Y=CSRLIN
  85. 850 ENDIF
  86. 860 COUNT=0:HANGULFLAG=0:CFLAG=0:VFLAG=0:PFLAG=0
  87. 870 CCODE=0:VCODE(0)=0:VCODE(1)=0:VCODE(2)=0
  88. 880 VCOUNT=0:PCOUNT=0:PCODE(0)=0:PCODE(1)=0:PCODE(2)=0
  89. 890 HANGULMODE=-1
  90. 900 *LOOP
  91. 910   COUNT=COUNT+1
  92. 920   A$=MID$(LIN$,COUNT,1)
  93. 930   IF A$="" THEN
  94. 940     IF HANGULFLAG THEN 'ハングルの処理中であったとき
  95. 950       GOSUB *ハングルの最後
  96. 960       VFLAG=0:PFLAG=-1
  97. 970     ENDIF
  98. 980     GOSUB *ハングル表示
  99. 990     IF NOCRFLAG=0 THEN
  100. 1000       GOSUB *改行 
  101. 1010     ENDIF
  102. 1020     NOCRFLAG=0
  103. 1030     GOTO *1行読み込み
  104. 1040   ENDIF
  105. 1050   IF HANGULMODE THEN
  106. 1060     GOSUB *ISALPHA
  107. 1070   ELSE
  108. 1080     ALPHA=0
  109. 1090   ENDIF
  110. 1100   IF ALPHA THEN ' ハングルのとき
  111. 1110     CODE1=ASC(A$)-65 'アルファベットのコード化
  112. 1120     IF CODE1>=26 THEN CODE1=CODE1-32 '小文字のとき
  113. 1130     ATR1=ATR(CODE1)
  114. 1140     IF HANGULFLAG THEN'ハングル続き
  115. 1150       IF ATR1=1 THEN ' 子音であるとき
  116. 1160         IF CFLAG THEN ' 子音の処理中のとき
  117. 1170           CWORK=CODE(CODE1)
  118. 1180           GOSUB *子音の処理
  119. 1190         ELSE IF VFLAG THEN ' 母音の処理中のとき
  120. 1200           GOSUB *母音の確定
  121. 1210           PFLAG=-1:PCOUNT=0
  122. 1220           GOSUB *パッチムの処理
  123. 1230         ELSE ' パッチムの処理中のとき
  124. 1240           GOSUB *パッチムの処理
  125. 1250         ENDIF
  126. 1260       ELSE IF ATR1=2 THEN' 濃音
  127. 1270         IF CFLAG THEN '子音処理中のときのQの処理
  128. 1280           CODE2=CCODE
  129. 1290           GOSUB *子音の濃音
  130. 1300           CCODE=CODE2
  131. 1310         ELSE IF PFLAG THEN' パッチム処理中のQの処理
  132. 1320           CODE2=PCODE(PCOUNT-1)
  133. 1330           GOSUB *子音の濃音
  134. 1340           PCODE(PCOUNT-1)=CODE2
  135. 1350         ELSE '母音処理中のQの処理
  136. 1360           GOSUB *母音の確定
  137. 1370           PFLAG=-1:PCOUNT=0
  138. 1380         ENDIF
  139. 1390       ELSE IF CFLAG THEN' 子音の処理中のときの母音の処理
  140. 1400         CFLAG=0:VCOUNT=0:VFLAG=-1
  141. 1410         GOSUB *子音の変換
  142. 1420         GOSUB *母音
  143. 1430       ELSE IF PFLAG THEN' パッチムの処理中のときの母音の処理
  144. 1440         PCOUNT=PCOUNT-1
  145. 1450         CWORK=PCODE(PCOUNT)
  146. 1460         CCODE=0
  147. 1470         GOSUB *パッチムの確定
  148. 1480         GOSUB *子音の処理
  149. 1490         CFLAG=0
  150. 1500         VCOUNT=0:VFLAG=-1
  151. 1510         GOSUB *子音の変換
  152. 1520         GOSUB *母音
  153. 1530       ELSE' 母音処理中のときの母音の処理
  154. 1540         GOSUB *母音
  155. 1550       ENDIF
  156. 1560     ELSE' ハングルの始まり
  157. 1570       HANGULFLAG=-1
  158. 1580       CFLAG=0
  159. 1590       VFLAG=0
  160. 1600       PFLAG=0
  161. 1610       CCODE=0
  162. 1620       PCOUNT=0
  163. 1630       VCOUNT=0
  164. 1640       IF ATR1=1 THEN '子音のとき
  165. 1650         CFLAG=-1
  166. 1660         CWORK=CODE(CODE1)
  167. 1670         GOSUB *子音の処理
  168. 1680       ELSE IF ATR1=0 THEN '母音のとき
  169. 1690         HANGULCODE(0)=8
  170. 1700         VFLAG=-1:VCOUNT=0
  171. 1710         GOSUB *母音
  172. 1720       ELSE ' Qのとき
  173. 1730         CFLAG=-1:CCODE=0
  174. 1740       ENDIF
  175. 1750     ENDIF
  176. 1760   ELSE ' ハングルでないとき
  177. 1770     IF HANGULFLAG THEN 'ハングルの処理中であったとき
  178. 1780       GOSUB *ハングルの最後
  179. 1790       HANGULFLAG=0
  180. 1800       PFLAG=0
  181. 1810     ENDIF
  182. 1820     IF A$="\" THEN
  183. 1830       GOSUB *ハングル表示
  184. 1840       COUNT=COUNT+1
  185. 1850       A$=MID$(LIN$,COUNT,1)
  186. 1860       IF A$="H" OR A$="h" THEN
  187. 1870         HANGULMODE=-1
  188. 1880       ELSE IF A$="A" OR A$="a" THEN
  189. 1890         HANGULMODE=0
  190. 1900       ELSE IF A$="C" OR A$="c" THEN
  191. 1910         NOCRFLAG=-1
  192. 1920       ELSE IF A$="%" THEN
  193. 1930         LIN$=""
  194. 1940       ELSE
  195. 1950         GOSUB *非ハングル表示
  196. 1960       ENDIF
  197. 1970     ELSE IF A$<>"-" THEN
  198. 1980       GOSUB *ハングル表示
  199. 1990       GOSUB *非ハングル表示
  200. 2000     ENDIF
  201. 2010   ENDIF
  202. 2020 GOTO *LOOP
  203. 2030 '
  204. 2040 ' ハングルの最後の処理
  205. 2050 '
  206. 2060 *ハングルの最後
  207. 2070  IF CFLAG THEN
  208. 2080    GOSUB *子音の変換
  209. 2090  ENDIF
  210. 2100  IF VFLAG THEN
  211. 2110    GOSUB *母音の確定
  212. 2120  ENDIF
  213. 2130  GOSUB *パッチムの確定
  214. 2140  RETURN
  215. 2150 '
  216. 2160 ' アルファベットかどうか調べる
  217. 2170 ' ALPHA アルファベットのとき    -1
  218. 2180 '       アルファベットでないとき 0
  219. 2190 '
  220. 2200 *ISALPHA
  221. 2210   ALPHA=A$>="A" AND A$<="Z"
  222. 2220   IF ALPHA THEN RETURN
  223. 2230   ALPHA=A$>="a" AND A$<="z"
  224. 2240   RETURN
  225. 2250 '
  226. 2260 *子音の処理
  227. 2270   IF CCODE=0 THEN
  228. 2280     CCODE=CWORK
  229. 2290   ELSE IF CCODE=CWORK THEN
  230. 2300     CODE2=CCODE
  231. 2310     GOSUB *子音の濃音
  232. 2320     CCODE=CODE2
  233. 2330   ENDIF
  234. 2340   RETURN
  235. 2350 '
  236. 2360 ' 子音の濃音
  237. 2370 *子音の濃音
  238. 2380   GOSUB *パッチムの濃音
  239. 2390   IF CODE2>=&H11 THEN RETURN
  240. 2400   IF CODE2=3 THEN
  241. 2410     CODE2=&H12
  242. 2420   ELSE IF CODE2=6 THEN
  243. 2430     CODE2=&H13
  244. 2440   ELSE IF CODE2=9 THEN
  245. 2450     CODE2=&H15
  246. 2460   ENDIF
  247. 2470   RETURN
  248. 2480 '
  249. 2490 ' パッチムの濃音
  250. 2500 *パッチムの濃音
  251. 2510   IF CODE2=1 THEN
  252. 2520     CODE2=&H11
  253. 2530   ELSE IF CODE2=7 THEN
  254. 2540     CODE2=&H14
  255. 2550   ELSE IF CODE2=11 THEN
  256. 2560     CODE2=&H11
  257. 2570   ELSE IF CODE2=12 THEN
  258. 2580     CODE2=&H12
  259. 2590   ELSE IF CODE2=13 THEN
  260. 2600     CODE2=&H13
  261. 2610   ELSE IF CODE2=10 THEN
  262. 2620     CODE2=&H15
  263. 2630   ENDIF
  264. 2640   RETURN
  265. 2650 '
  266. 2660 ' 母音
  267. 2670 *母音
  268. 2680   IF VCOUNT<4 THEN
  269. 2690     VCODE(VCOUNT)=CODE(CODE1)
  270. 2700     VCOUNT=VCOUNT+1
  271. 2710   ENDIF
  272. 2720   RETURN
  273. 2730 '
  274. 2740 ' 母音の確定
  275. 2750 *母音の確定
  276. 2760   VFLAG=0
  277. 2770   IF VCOUNT=1 THEN ' 1字
  278. 2780     IF VCODE(0)=1 THEN      'A
  279. 2790       VOWEL=1
  280. 2800     ELSE IF VCODE(0)=2 THEN 'E
  281. 2810       VOWEL=&H13
  282. 2820     ELSE IF VCODE(0)=3 THEN 'I
  283. 2830       VOWEL=10
  284. 2840     ELSE IF VCODE(0)=4 THEN 'O
  285. 2850       VOWEL=5
  286. 2860     ELSE IF VCODE(0)=5 THEN 'U
  287. 2870       VOWEL=7
  288. 2880     ENDIF
  289. 2890   ELSE IF VCOUNT=2 THEN ' 2字
  290. 2900     IF VCODE(0)=1 THEN      'A
  291. 2910       IF VCODE(1)=2 OR VCODE(1)=3 THEN 'AE AI
  292. 2920         VOWEL=&H11
  293. 2930       ELSE
  294. 2940         VCOUNT=1:GOTO *母音の確定
  295. 2950       ENDIF
  296. 2960     ELSE IF VCODE(0)=2 THEN  'E
  297. 2970       IF VCODE(1)=4 THEN 'EO
  298. 2980         VOWEL=3
  299. 2990       ELSE IF VCODE(1)=5 THEN 'EU
  300. 3000         VOWEL=9
  301. 3010       ELSE
  302. 3020         VCOUNT=1:GOTO *母音の確定
  303. 3030       ENDIF
  304. 3040     ELSE IF VCODE(0)=4 THEN  'O
  305. 3050       IF VCODE(1)=1 THEN 'OA
  306. 3060         VOWEL=&H15
  307. 3070       ELSE IF VCODE(1)=3 THEN 'OI
  308. 3080         VOWEL=&H17
  309. 3090       ELSE
  310. 3100         VCOUNT=1:GOTO *母音の確定
  311. 3110       ENDIF
  312. 3120     ELSE IF VCODE(0)=5 THEN  'U
  313. 3130       IF VCODE(1)=2 THEN 'UE
  314. 3140         VOWEL=&H19
  315. 3150       ELSE IF VCODE(1)=3 THEN 'UI
  316. 3160         VOWEL=&H1A
  317. 3170       ELSE
  318. 3180         VCOUNT=1:GOTO *母音の確定
  319. 3190       ENDIF
  320. 3200     ELSE IF VCODE(0)=7 THEN  'Y
  321. 3210       IF VCODE(1)=1 THEN 'YA
  322. 3220         VOWEL=2
  323. 3230       ELSE IF VCODE(1)=2 THEN 'YE
  324. 3240         VOWEL=&H14
  325. 3250       ELSE IF VCODE(1)=4 THEN 'YO
  326. 3260         VOWEL=6
  327. 3270       ELSE IF VCODE(1)=5 THEN 'YU
  328. 3280         VOWEL=8
  329. 3290       ELSE
  330. 3300         VCOUNT=1
  331. 3310         VCODE(0)=VCODE(1)
  332. 3320         GOTO *母音の確定
  333. 3330       ENDIF
  334. 3340     ELSE IF VCODE(0)=6 THEN  'W
  335. 3350       IF VCODE(1)=1 THEN 'WA
  336. 3360         VOWEL=&H15
  337. 3370       ELSE IF VCODE(1)=2 THEN 'WE
  338. 3380         VOWEL=&H19
  339. 3390       ELSE IF VCODE(1)=3 THEN 'WI
  340. 3400         VOWEL=&H1A
  341. 3410       ELSE
  342. 3420         VCOUNT=1
  343. 3430         VCODE(0)=VCODE(1)
  344. 3440         GOTO *母音の確定
  345. 3450       ENDIF
  346. 3460     ENDIF
  347. 3470   ELSE IF VCOUNT=3 THEN ' 3字
  348. 3480     IF VCODE(0)=2 THEN      'E
  349. 3490       IF VCODE(1)=4 AND VCODE(2)=3 THEN 'EOI
  350. 3500         VOWEL=&H13
  351. 3510       ELSE IF VCODE(1)=5 AND VCODE(2)=3 THEN 'EUI
  352. 3520         VOWEL=&H1B
  353. 3530       ELSE
  354. 3540         VCOUNT=2:GOTO *母音の確定
  355. 3550       ENDIF
  356. 3560     ELSE IF VCODE(0)=4 THEN  'O
  357. 3570       IF VCODE(1)=1 AND (VCODE(2)=2 OR VCODE(2)=3) THEN 'OAE OAI
  358. 3580         VOWEL=&H16
  359. 3590       ELSE
  360. 3600         VCOUNT=2:GOTO *母音の確定
  361. 3610       ENDIF
  362. 3620     ELSE IF VCODE(0)=5 THEN  'U
  363. 3630       IF VCODE(1)=2 AND VCODE(2)=4 THEN 'UEO
  364. 3640         VOWEL=&H18
  365. 3650       ELSE
  366. 3660         VCOUNT=2:GOTO *母音の確定
  367. 3670       ENDIF
  368. 3680     ELSE IF VCODE(0)=7 THEN  'Y
  369. 3690       IF VCODE(1)=1 AND (VCODE(2)=2 OR VCODE(2)=3) THEN 'YAE YAI
  370. 3700         VOWEL=&H12
  371. 3710       ELSE IF VCODE(1)=2 AND VCODE(2)=4 THEN 'YEO
  372. 3720         VOWEL=4
  373. 3730       ELSE
  374. 3740         VCOUNT=2
  375. 3750         VCODE(0)=VCODE(1):VCODE(1)=VCODE(2)
  376. 3760         GOTO *母音の確定
  377. 3770       ENDIF
  378. 3780     ELSE IF VCODE(0)=6 THEN  'W
  379. 3790       IF VCODE(1)=1 AND (VCODE(2)=2 OR VCODE(2)=3) THEN 'WAE WAI
  380. 3800         VOWEL=&H16
  381. 3810       ELSE IF VCODE(1)=2 AND VCODE(2)=4 THEN 'WEO
  382. 3820         VOWEL=&H18
  383. 3830       ELSE
  384. 3840         VCOUNT=2
  385. 3850         VCODE(0)=VCODE(1):VCODE(1)=VCODE(2)
  386. 3860         GOTO *母音の確定
  387. 3870       ENDIF
  388. 3880     ENDIF
  389. 3890   ELSE IF VCOUNT=4 THEN ' 4字
  390. 3900     IF VCODE(0)=6 AND VCODE(1)=2 AND VCODE(2)=4 AND VCODE(3)=3 THEN 'YEOI
  391. 3910       VOWEL=&H14
  392. 3920     ELSE
  393. 3930       VCOUNT=3
  394. 3940       IF VCODE(0)=6 OR VCODE(0)=7 THEN 'Y W
  395. 3950         VCODE(0)=VCODE(1):VCODE(1)=VCODE(2):VCODE(2)=VCODE(3)
  396. 3960       ENDIF
  397. 3970       GOTO *母音の確定
  398. 3980     ENDIF
  399. 3990   ENDIF
  400. 4000   GOSUB *母音の変換
  401. 4010   RETURN
  402. 4020 '
  403. 4030 ' パッチムの処理
  404. 4040 *パッチムの処理
  405. 4050   IF PCOUNT<2 THEN
  406. 4060     PCODE(PCOUNT)=CODE(CODE1)
  407. 4070     PCOUNT=PCOUNT+1
  408. 4080   ELSE
  409. 4090     CWORK=CODE(CODE1)
  410. 4100     CCODE=0
  411. 4110     GOSUB *パッチムの確定
  412. 4120     CFLAG=-1
  413. 4130     GOSUB *子音の処理
  414. 4140   ENDIF
  415. 4150   RETURN
  416. 4160 '
  417. 4170 ' パッチムの確定
  418. 4180 *パッチムの確定
  419. 4190   IF PCOUNT=0 THEN
  420. 4200     BATCIM=0
  421. 4210   ELSE IF PCOUNT=1 THEN
  422. 4220     BATCIM=PCODE(0)
  423. 4230   ELSE
  424. 4240     IF PCODE(0)>=&H11 THEN
  425. 4250       GOSUB *パッチムの分割
  426. 4260     ELSE
  427. 4270       CODE2=PCODE(0)
  428. 4280       IF PCODE(0)=PCODE(1) THEN
  429. 4290         GOSUB *パッチムの濃音
  430. 4300         BATCIM=CODE2
  431. 4310         IF CODE2<&H11 THEN
  432. 4320           CCODE=CODE2
  433. 4330         ENDIF
  434. 4340       ELSE
  435. 4350         IF PCODE(0)=1 THEN 'G
  436. 4360           IF PCODE(1)=7 THEN 'GS
  437. 4370             BATCIM=&H21
  438. 4380           ELSE
  439. 4390             GOSUB *パッチムの分割
  440. 4400           ENDIF
  441. 4410         ELSE IF PCODE(0)=2 THEN 'N
  442. 4420           IF PCODE(1)=1 THEN 'NG
  443. 4430             BATCIM=8
  444. 4440           ELSE IF PCODE(1)=9 THEN 'NJ NZ
  445. 4450             BATCIM=&H22
  446. 4460           ELSE IF PCODE(1)=14 THEN 'NH
  447. 4470             BATCIM=&H23
  448. 4480           ELSE
  449. 4490             GOSUB *パッチムの分割
  450. 4500           ENDIF
  451. 4510         ELSE IF PCODE(0)=4 THEN 'R L
  452. 4520           IF PCODE(1)=1 THEN 'RG LG
  453. 4530             BATCIM=&H24
  454. 4540           ELSE IF PCODE(1)=5 THEN 'RM LM
  455. 4550             BATCIM=&H25
  456. 4560           ELSE IF PCODE(1)=6 THEN 'RB LB RV LV
  457. 4570             BATCIM=&H26
  458. 4580           ELSE IF PCODE(1)=7 THEN 'RS LS
  459. 4590             BATCIM=&H27
  460. 4600           ELSE IF PCODE(1)=12 THEN 'RT LT
  461. 4610             BATCIM=&H28
  462. 4620           ELSE IF PCODE(1)=13 THEN 'RF LF RP LP
  463. 4630             BATCIM=&H29
  464. 4640           ELSE IF PCODE(1)=14 THEN 'RH LH
  465. 4650             BATCIM=&H2A
  466. 4660           ELSE
  467. 4670             GOSUB *パッチムの分割
  468. 4680           ENDIF
  469. 4690         ELSE IF PCODE(0)=6 AND PCODE(1)=7 THEN 'BS VS
  470. 4700           BATCIM=&H2B
  471. 4710         ELSE
  472. 4720           GOSUB *パッチムの分割
  473. 4730         ENDIF
  474. 4740       ENDIF
  475. 4750     ENDIF
  476. 4760   ENDIF
  477. 4770   PFLAG=0:PCOUNT=0
  478. 4780   GOSUB *パッチムの変換
  479. 4790   RETURN
  480. 4800 '
  481. 4810 *パッチムの分割
  482. 4820   BATCIM=PCODE(0)
  483. 4830   CCODE=PCODE(1)
  484. 4840   CFLAG=-1
  485. 4850   RETURN
  486. 4860 '
  487. 4870 ' 子音の変換
  488. 4880 *子音の変換
  489. 4890   IF CCODE<15 THEN
  490. 4900     CODE2=CCODE
  491. 4910   ELSE
  492. 4920     CODE2=CCODE-2
  493. 4930   ENDIF
  494. 4940   HANGULCODE(0)=CODE2
  495. 4950   CCODE=0
  496. 4960   RETURN
  497. 4970 '
  498. 4980 ' 母音の変換
  499. 4990 *母音の変換
  500. 5000   IF VOWEL<11 THEN
  501. 5010     CODE2=VOWEL
  502. 5020   ELSE
  503. 5030     CODE2=VOWEL-6
  504. 5040   ENDIF
  505. 5050   HANGULCODE(1)=CODE2
  506. 5060   VOWEL=0
  507. 5070   RETURN
  508. 5080 '
  509. 5090 ' パッチムの変換
  510. 5100 *パッチムの変換
  511. 5110   IF BATCIM<15 THEN
  512. 5120     CODE2=BATCIM
  513. 5130   ELSE IF BATCIM=&H11 THEN
  514. 5140     CODE2=&H0F
  515. 5150   ELSE IF BATCIM=&H12 THEN
  516. 5160     CODE2=3
  517. 5170   ELSE IF BATCIM=&H13 THEN
  518. 5180     CODE2=6
  519. 5190   ELSE IF BATCIM=&H14 THEN
  520. 5200     CODE2=&H10
  521. 5210   ELSE IF BATCIM=&H15 THEN
  522. 5220     CODE2=9
  523. 5230   ELSE IF BATCIM<&H20 THEN
  524. 5240     CODE2=0
  525. 5250   ELSE
  526. 5260     CODE2=BATCIM-16
  527. 5270   ENDIF
  528. 5280   HANGULCODE(2)=CODE2
  529. 5290   BATCIM=0
  530. 5300   GOSUB *ハングル表示
  531. 5310   RETURN
  532. 5320 '
  533. 5330 ' ハングル表示
  534. 5340 *ハングル表示
  535. 5350   IF HANGULCODE(0)=0 THEN
  536. 5360     WORK=HANGULCODE(1)-1
  537. 5370   ELSE IF HANGULCODE(1)=0 THEN
  538. 5380     WORK=HANGULCODE(0)*589-568
  539. 5390   ELSE
  540. 5400     WORK=HANGULCODE(0)*589+HANGULCODE(1)*28+HANGULCODE(2)-595
  541. 5410   ENDIF
  542. 5420   HANGULCODE(0)=0
  543. 5430   HANGULCODE(1)=0
  544. 5440   HANGULCODE(2)=0
  545. 5450   IF WORK<0 THEN RETURN
  546. 5460   REC=WORK+1
  547. 5470   GET #2,REC
  548. 5480   FOR I=0 TO 15
  549. 5490     FIELD #2,2*I AS DMY$,2 AS F$
  550. 5500     FONT(I)=CVI(F$)
  551. 5510   NEXT I
  552. 5520   SY=Y*19.2!
  553. 5530   PUT@(X*8,SY)-(X*8+15,SY+15),FONT
  554. 5540   X=X+2
  555. 5550   IF X>79 THEN
  556. 5560     GOSUB *改行
  557. 5570   ENDIF
  558. 5580   RETURN
  559. 5590 '
  560. 5600 *改行
  561. 5610   X=0
  562. 5620   Y=Y+1
  563. 5630   IF Y>=23 THEN
  564. 5640     LOCATE 0,25:PRINT "何かキーを押してください。";:A1$=INPUT$(1)
  565. 5650     CLS:Y=0
  566. 5660   ENDIF
  567. 5670   RETURN
  568. 5680 '
  569. 5690 ' 非ハングル表示
  570. 5700 *非ハングル表示
  571. 5710   IF A$>=CHR$(&H80) THEN
  572. 5720     IF A$<CHR$(&HA0) OR A$>=CHR$(&HE0) THEN
  573. 5730       COUNT=COUNT+1
  574. 5740       A$=A$+MID$(LIN$,COUNT,1)
  575. 5750     ENDIF
  576. 5760   ENDIF
  577. 5770   IF X+LEN(A$)>80 THEN
  578. 5780     GOSUB *改行
  579. 5790   ENDIF
  580. 5800   SY=Y*19.2!
  581. 5810   SYMBOL(X*8,SY),A$,1,1
  582. 5820   X=X+LEN(A$)
  583. 5830   RETURN
  584. 5840 '
  585. 5850 ' 終了処理
  586. 5860 *END
  587. 5870   Y=24
  588. 5880   GOSUB *改行
  589. 5890 END
  590. 5900 *SETFONT
  591. 5910   CLOSE #2
  592. 5920   KILL FONTFILE$
  593. 5930   LINE INPUT "フォントファイル名は";FONTFILE$
  594. 5940   GOTO *出力ファイル
  595. 5950 '
  596. 5960 *ATTRIBUTE
  597. 5970 '    A B  C D E  F G  H I J  K L M N O  P Q R S  T U V W X Y Z
  598. 5980 DATA 0,1, 1,1,0, 1,1, 1,0,1, 1,1,1,1,0, 1,2,1,1, 1,0,1,0,1,0,1
  599. 5990 DATA 1,6,10,3,2,13,1,14,3,9,11,4,5,2,4,13,0,4,7,12,5,6,6,8,7,9
  600.